var utils = {};
/**
 * 从localStorage里面根据指定的键获取一个数组
 * @param {string} key 存储在localStorage里面数据对应的键
 * @returns {Array} 将JSON字符串反序列化后的数组
 */
utils.getLocalDataArray = function(key){
  var data = localStorage.getItem(key);
  var arr = JSON.parse(data);
  if(!arr){
    arr = [];
  }
  return arr;
}
/**
 * 将一个数组以指定的键存储到localStorage里面
 * @param {string} key 存储到localStorage中的数据的键
 * @param {Array} arr 要存储到localStorage里面的数组
 * @returns {undefined}
 */
utils.saveLocalDataArray= function(key,arr){
  var json = JSON.stringify(arr);
  localStorage.setItem(key,json);
}

/**
 * 向localStorage里面的数组数据追加一个数据对象
 * @param {string} key 在localStorage中的数组对应的键
 * @param {object} data 要追加到数组中的数组
 * @returns {undefined}
 */
utils.appendDataIntoArray = function(key,data){
  var arr = this.getLocalDataArray(key);
  arr.push(data);
  this.saveLocalDataArray(key,arr);
}

/**
 * 向localStorage里面的数组数据前插入一个数据对象
 * @param {string} key 在localStorage中的数组对应的键
 * @param {object} data 要追加到数组中的数组
 * @returns {undefined}
 */
utils.prependDataIntoArray = function(key,data){
  var arr = this.getLocalDataArray(key);
  arr.unshift(data);
  this.saveLocalDataArray(key,arr);
}

/**
 * 根据对应的id从localStorage中的数组中删除一条数据
 * @param {string} key 存储在localStorage中的数组的键
 * @param {string | number} id 指定的数据的id
 * @returns {boolean} 是否删除成功
 */
utils.deleteLocalDataById = function(key,id){
  var arr = this.getLocalDataArray(key);
  var data = null;
  arr.forEach(function(e,i){
    if(e.pID == id){
      data = e;
      arr.splice(i,1);
    }
  })
  this.saveLocalDataArray(key,arr);
  return !!data;
}

/**
 * 根据id修改localStorage里面的数据
 * @param {string} key 对应数组的键
 * @param {string | number} id 对应数据的id
 * @param {object} data 要把数据修改成什么样的对象
 * @returns {boolean} 是否成功
 */
utils.modifyLocalDataById = function(key,id,data){
  var arr = this.getLocalDataArray(key);
  var obj = null;
  arr.forEach(function(e,i){
    if(e.id == id){
      for(var key in data){
        if(key == 'id'){
          continue;
        }
        e[key] = data[key];
      }
      obj = e;
    }
  })
  return !!obj;
}
